#define JEEPS_GPSDATUM_H_INCLUDED_
-
- typedef struct GPS_SEllipse {
- const char* name;
- double a;
- double invf;
- } GPS_OEllipse, *GPS_PEllipse;
-
- GPS_OEllipse GPS_Ellipse[]= {
- { "Airy 1830", 6377563.396, 299.3249646 },
- { "Airy 1830 Modified", 6377340.189, 299.3249646 },
- { "Australian National", 6378160.000, 298.25 },
- { "Bessel 1841 (Namibia)", 6377483.865, 299.1528128 },
- { "Bessel 1841", 6377397.155, 299.1528128 },
- { "Clarke 1866", 6378206.400, 294.9786982 },
- { "Clarke 1880", 6378249.145, 293.465 },
- { "Everest (India 1830)", 6377276.345, 300.8017 },
- { "Everest (Sabah Sarawak)", 6377298.556, 300.8017 },
- { "Everest (India 1956)", 6377301.243, 300.8017 },
- { "Everest (Malaysia 1969)", 6377295.664, 300.8017 },
- { "Everest (Malay & Sing)", 6377304.063, 300.8017 },
- { "Everest (Pakistan)", 6377309.613, 300.8017 },
- { "Modified Fischer 1960", 6378155.000, 298.3 },
- { "Helmert 1906", 6378200.000, 298.3 },
- { "Hough 1960", 6378270.000, 297.0 },
- { "Indonesian 1974", 6378160.000, 298.247 },
- { "International 1924", 6378388.000, 297.0 },
- { "Krassovsky 1940", 6378245.000, 298.3 },
- { "GRS67", 6378160.000, 6356774.516 },
- { "GRS75", 6378140.000, 6356755.288 },
- { "GRS80", 6378137.000, 298.257222101 },
- { "S. American 1969", 6378160.000, 298.25 },
- { "WGS60", 6378165.000, 298.3 },
- { "WGS66", 6378145.000, 298.25 },
- { "WGS72", 6378135.000, 298.26 },
- { "WGS84", 6378137.000, 298.257223563 },
- { "Clarke 1880 (Benoit)", 6378300.789, 293.466 },
- };
-
-
-
- typedef struct GPS_SDatum {
- const char* name;
- int ellipse;
- double dx;
- double dy;
- double dz;
- } GPS_ODatum, *GPS_PDatum;
-
- GPS_ODatum GPS_Datum[]= {
- /* 000 */ { "Adindan", 6, -166, -15, 204 },
- /* 001 */ { "AFG", 18, -43, -163, 45 },
- /* 002 */ { "Ain-El-Abd", 17, -150, -251, -2 },
- /* 003 */ { "Alaska-NAD27", 5, -5, 135, 172 },
- /* 004 */ { "Alaska-Canada", 6, -9, 151, 185 },
- /* 005 */ { "Anna-1-Astro", 2, -491, -22, 435 },
- /* 006 */ { "ARC 1950 Mean", 6, -143, -90, -294 },
- /* 007 */ { "ARC 1960 Mean", 6, -160, -8, -300 },
- /* 008 */ { "Asc Island 58", 17, -207, 107, 52 },
- /* 009 */ { "Astro B4", 17, 114, -116, -333 },
- /* 010 */ { "Astro Beacon E", 17, 145, 75, -272 },
- /* 011 */ { "Astro pos 71/4", 17, -320, 550, -494 },
- /* 012 */ { "Astro stn 52", 17, 124, -234, -25 },
- /* 013 */ { "Australia Geo 1984", 2, -134, -48, 149 },
- /* 014 */ { "Bahamas NAD27", 6, -4, 154, 178 },
- /* 015 */ { "Bellevue IGN", 17, -127, -769, 472 },
- /* 016 */ { "Bermuda 1957", 6, -73, 213, 296 },
- /* 017 */ { "Bukit Rimpah", 4, -384, 664, -48 },
- /* 018 */ { "Camp_Area_Astro", 17, -104, -129, 239 },
- /* 019 */ { "Campo_Inchauspe", 17, -148, 136, 90 },
- /* 020 */ { "Canada_Mean(NAD27)", 5, -10, 158, 187 },
- /* 021 */ { "Canal_Zone_(NAD27)", 5, 0, 125, 201 },
- /* 022 */ { "Canton_Island_1966", 17, 298, -304, -375 },
- /* 023 */ { "Cape", 6, -136, -108, -292 },
- /* 024 */ { "Cape_Canaveral_mean", 5, -2, 150, 181 },
- /* 025 */ { "Carribean NAD27", 5, -7, 152, 178 },
- /* 026 */ { "Carthage", 6, -263, 6, 431 },
- /* 027 */ { "Cent America NAD27", 5 , 0, 125, 194 },
- /* 028 */ { "Chatham 1971", 17, 175, -38, 113 },
- /* 029 */ { "Chua Astro", 17, -134, 229, -29 },
- /* 030 */ { "Corrego Alegre", 17, -206, 172, -6 },
- /* 031 */ { "Cuba NAD27", 5, -9, 152, 178 },
- /* 032 */ { "Cyprus", 17, -104, -101, -140 },
- /* 033 */ { "Djakarta(Batavia)", 4, -377, 681, -50 },
- /* 034 */ { "DOS 1968", 17, 230, -199, -752 },
- /* 035 */ { "Easter lsland 1967", 17, 211, 147, 111 },
- /* 036 */ { "Egypt", 17, -130, -117, -151 },
- /* 037 */ { "European 1950", 17, -87, -96, -120 },
- /* 038 */ { "European 1950 mean", 17, -87, -98, -121 },
- /* 039 */ { "European 1979 mean", 17, -86, -98, -119 },
- /* 040 */ { "Finnish Nautical", 17, -78, -231, -97 },
- /* 041 */ { "Gandajika Base", 17, -133, -321, 50 },
- /* 042 */ { "Geodetic Datum 49", 17, 84, -22, 209 },
- /* 043 */ { "Ghana", 26, 0, 0, 0 },
- /* 044 */ { "Greenland NAD27", 5, 11, 114, 195 },
- /* 045 */ { "Guam 1963", 5, -100, -248, 259 },
- /* 046 */ { "Gunung Segara", 4, -403, 684, 41 },
- /* 047 */ { "Gunung Serindung 1962", 26, 0, 0, 0 },
- /* 048 */ { "GUX1 Astro", 17, 252, -209, -751 },
- /* 049 */ { "Herat North", 17, -333, -222, 114 },
- /* 050 */ { "Hjorsey 1955", 17, -73, 46, 86 },
- /* 051 */ { "Hong Kong 1963", 17, -156, -271, -189 },
- /* 052 */ { "Hu-Tzu-Shan", 17, -634, -549, -201 },
- /* 053 */ { "Indian", 9, 289, 734, 257 },
- /* 054 */ { "Iran", 17, -117, -132, -164 },
- /* 055 */ { "Ireland 1965", 1, 506, -122, 611 },
- /* 056 */ { "ISTS 073 Astro 69", 17, 208, -435, -229 },
- /* 057 */ { "Johnston Island 61", 17, 191, -77, -204 },
- /* 058 */ { "Kandawala", 7, -97, 787, 86 },
- /* 059 */ { "Kerguelen Island", 17, 145, -187, 103 },
- /* 060 */ { "Kertau 48", 11, -11, 851, 5 },
- /* 061 */ { "L.C. 5 Astro", 5, 42, 124, 147 },
- /* 062 */ { "La Reunion", 17, 94, -948, -1262 },
- /* 063 */ { "Liberia 1964", 6, -90, 40, 88 },
- /* 064 */ { "Luzon", 5, -133, -77, -51 },
- /* 065 */ { "Mahe 1971", 6, 41, -220, -134 },
- /* 066 */ { "Marco Astro", 17, -289, -124, 60 },
- /* 067 */ { "Masirah Is. Nahrwan", 6, -247, -148, 369 },
- /* 068 */ { "Massawa", 4, 639, 405, 60 },
- /* 069 */ { "Merchich", 6, 31, 146, 47 },
- /* 070 */ { "Mexico NAD27", 5, -12, 130, 190 },
- /* 071 */ { "Midway Astro 61", 17, 912, -58, 1227 },
- /* 072 */ { "Mindanao", 5, -133, -79, -72 },
- /* 073 */ { "Minna", 6, -92, -93, 122 },
- /* 074 */ { "Montjong Lowe", 26, 0, 0, 0 },
- /* 075 */ { "Nahrwan", 6, -231, -196, 482 },
- /* 076 */ { "Naparima BWI", 17, -2, 374, 172 },
- /* 077 */ { "North America 83", 21, 0, 0, 0 },
- /* 078 */ { "N. America 1927 mean", 5, -8, 160, 176 },
- /* 079 */ { "Observatorio 1966", 17, -425, -169, 81 },
- /* 080 */ { "Old Egyptian", 14, -130, 110, -13 },
- /* 081 */ { "Old Hawaiian_mean", 5, 89, -279, -183 },
- /* 082 */ { "Old Hawaiian Kauai", 5, 45, -290, -172 },
- /* 083 */ { "Old Hawaiian Maui", 5, 65, -290, -190 },
- /* 084 */ { "Old Hawaiian Oahu", 5, 56, -284, -181 },
- /* 085 */ { "Oman", 6, -346, -1, 224 },
- /* 086 */ { "OSGB36", 0, 375, -111, 431 },
- /* 087 */ { "Pico De Las Nieves", 17, -307, -92, 127 },
- /* 088 */ { "Pitcairn Astro 67", 17, 185, 165, 42 },
- /* 089 */ { "S. Am. 1956 mean(P)", 17, -288, 175, -376 },
- /* 090 */ { "S. Chilean 1963 (P)", 17, 16, 196, 93 },
- /* 091 */ { "Puerto Rico", 5, 11, 72, -101 },
- /* 092 */ { "Pulkovo 1942", 18, 28, -130, -95 },
- /* 093 */ { "Qornoq", 17, 164, 138, -189 },
- /* 094 */ { "Quatar National", 17, -128, -283, 22 },
- /* 095 */ { "Rome 1940", 17, -225, -65, 9 },
- /* 096 */ { "S-42(Pulkovo1942)", 18, 28, -121, -77 },
- /* 097 */ { "S.E.Asia_(Indian)", 7, 173, 750, 264 },
- /* 098 */ { "SAD-69/Brazil", 22, -60, -2, -41 },
- /* 099 */ { "Santa Braz", 17, -203, 141, 53 },
- /* 100 */ { "Santo (DOS)", 17, 170, 42, 84 },
- /* 101 */ { "Sapper Hill 43", 17, -355, 16, 74 },
- /* 102 */ { "Schwarzeck", 3, 616, 97, -251 },
- /* 103 */ { "Sicily", 17, -97, -88, -135 },
- /* 104 */ { "Sierra Leone 1960", 26, 0, 0, 0 },
- /* 105 */ { "S. Am. 1969 mean", 22, -57, 1, -41 },
- /* 106 */ { "South Asia", 13, 7, -10, -26 },
- /* 107 */ { "Southeast Base", 17, -499, -249, 314 },
- /* 108 */ { "Southwest Base", 17, -104, 167, -38 },
- /* 109 */ { "Tananarive Obs 25", 17, -189, -242, -91 },
- /* 110 */ { "Thai/Viet (Indian)", 7, 214, 836, 303 },
- /* 111 */ { "Timbalai 1948", 7, -689, 691, -45 },
- /* 112 */ { "Tokyo mean", 4, -128, 481, 664 },
- /* 113 */ { "Tristan Astro 1968", 17, -632, 438, -609 },
- /* 114 */ { "United Arab Emirates", 6, -249, -156, 381 },
- /* 115 */ { "Viti Levu 1916", 6, 51, 391, -36 },
- /* 116 */ { "Wake Eniwetok 60", 15, 101, 52, -39 },
- /* 117 */ { "WGS 72", 25, 0, 0, 5 },
- /* 118 */ { "WGS 84", 26, 0, 0, 0 },
- /* 119 */ { "Yacare", 17, -155, 171, 37 },
- /* 120 */ { "Zanderij", 17, -265, 120, -358 },
- /* 121 */ { "Sweden", 4, 424.3, -80.5, 613.1 },
- /* 122 */ { "GDA 94", 21, 0, 0, 0 },
- /* 123 */ { "CH-1903", 4, 674, 15, 405 },
- /* 124 */ { "Palestine 1923", 27, -235, -85, 264 },
- /* 125 */ { "ITM (Israeli New)", 21, -48, 55, -52 },
- { nullptr, 0, 0, 0, 0 }
- };
-
-
- typedef struct GPS_SDatum_Alias {
- const char* alias;
- const int datum;
- } GPS_ODatum_Alias, *GPS_PDatum_Alias;
-
- GPS_ODatum_Alias GPS_DatumAlias[] = {
- { "Australian GDA94", 122 },
- { "Australian Geocentric 1994 (GDA94)", 122}, /* Observed in Ozi */
- { "GDA94", 122 },
- { "GDA-94", 122 },
- { "CH1903", 123 },
- { "CH 1903", 123 },
- { "European 1950 (Spain and Portugal)", 38 },
- { "Geodetic Datum 1949", 42 },
- { "NAD27 Alaska", 3 },
- { "NAD27 Bahamas", 14 },
- { "NAD27 Canada", 4 },
- { "NAD27 Canal Zone", 21 },
- { "NAD27 Caribbean", 25 },
- { "NAD27 Central", 27 },
- { "NAD27 CONUS", 78 },
- { "NAD27 Cuba", 31 },
- { "NAD27 Greenland", 44 },
- { "NAD27 Mexico", 70 },
- { "NAD83", 77 },
- { "NAD 83", 77 },
- { "NAD-83", 77 },
- { "OSGB 36", 86 },
- { "OSGB-36", 86 },
- { "Wake-Eniwetok 1960", 116 },
- { "WGS72", 117 },
- { "WGS-72", 117 },
- { "WGS84", 118 },
- { "WGS-84", 118 },
- { "Israeli", 124 },
- { "D_Israel_new", 125 },
- { nullptr, -1 }
- };
-
-
- /* UK Ordnance Survey Nation Grid Map Codes */
- static const char* UKNG[]= {
- "SV","SW","SX","SY","SZ","TV","TW","SQ","SR","SS","ST","SU","TQ","TR",
- "SL","SM","SN","SO","SP","TL","TM","SF","SG","SH","SJ","SK","TF","TG",
- "SA","SB","SC","SD","SE","TA","TB","NV","NW","NX","NY","NZ","OV","OW",
- "NQ","NR","NS","NT","NU","OQ","OR","NL","NM","NN","NO","NP","OL","OM",
- "NF","NG","NH","NJ","NK","OF","OG","NA","NB","NC","ND","NE","OA","OB",
- "HV","HW","HX","HY","HZ","JV","JW","HQ","HR","HS","HT","HU","JQ","JR",
- "HL","HM","HN","HO","HP","JL","JM",""
- };
+struct GPS_Ellipse {
+ const char* name;
+ double a;
+ double invf;
+};
+
+const GPS_Ellipse GPS_Ellipses[]= {
+ { "Airy 1830", 6377563.396, 299.3249646 },
+ { "Airy 1830 Modified", 6377340.189, 299.3249646 },
+ { "Australian National", 6378160.000, 298.25 },
+ { "Bessel 1841 (Namibia)", 6377483.865, 299.1528128 },
+ { "Bessel 1841", 6377397.155, 299.1528128 },
+ { "Clarke 1866", 6378206.400, 294.9786982 },
+ { "Clarke 1880", 6378249.145, 293.465 },
+ { "Everest (India 1830)", 6377276.345, 300.8017 },
+ { "Everest (Sabah Sarawak)", 6377298.556, 300.8017 },
+ { "Everest (India 1956)", 6377301.243, 300.8017 },
+ { "Everest (Malaysia 1969)", 6377295.664, 300.8017 },
+ { "Everest (Malay & Sing)", 6377304.063, 300.8017 },
+ { "Everest (Pakistan)", 6377309.613, 300.8017 },
+ { "Modified Fischer 1960", 6378155.000, 298.3 },
+ { "Helmert 1906", 6378200.000, 298.3 },
+ { "Hough 1960", 6378270.000, 297.0 },
+ { "Indonesian 1974", 6378160.000, 298.247 },
+ { "International 1924", 6378388.000, 297.0 },
+ { "Krassovsky 1940", 6378245.000, 298.3 },
+ { "GRS67", 6378160.000, 6356774.516 },
+ { "GRS75", 6378140.000, 6356755.288 },
+ { "GRS80", 6378137.000, 298.257222101 },
+ { "S. American 1969", 6378160.000, 298.25 },
+ { "WGS60", 6378165.000, 298.3 },
+ { "WGS66", 6378145.000, 298.25 },
+ { "WGS72", 6378135.000, 298.26 },
+ { "WGS84", 6378137.000, 298.257223563 },
+ { "Clarke 1880 (Benoit)", 6378300.789, 293.466 },
+};
+
+
+
+struct GPS_Datum {
+ const char* name;
+ int ellipse;
+ double dx;
+ double dy;
+ double dz;
+};
+
+const GPS_Datum GPS_Datums[]= {
+ /* 000 */ { "Adindan", 6, -166, -15, 204 },
+ /* 001 */ { "AFG", 18, -43, -163, 45 },
+ /* 002 */ { "Ain-El-Abd", 17, -150, -251, -2 },
+ /* 003 */ { "Alaska-NAD27", 5, -5, 135, 172 },
+ /* 004 */ { "Alaska-Canada", 6, -9, 151, 185 },
+ /* 005 */ { "Anna-1-Astro", 2, -491, -22, 435 },
+ /* 006 */ { "ARC 1950 Mean", 6, -143, -90, -294 },
+ /* 007 */ { "ARC 1960 Mean", 6, -160, -8, -300 },
+ /* 008 */ { "Asc Island 58", 17, -207, 107, 52 },
+ /* 009 */ { "Astro B4", 17, 114, -116, -333 },
+ /* 010 */ { "Astro Beacon E", 17, 145, 75, -272 },
+ /* 011 */ { "Astro pos 71/4", 17, -320, 550, -494 },
+ /* 012 */ { "Astro stn 52", 17, 124, -234, -25 },
+ /* 013 */ { "Australia Geo 1984", 2, -134, -48, 149 },
+ /* 014 */ { "Bahamas NAD27", 6, -4, 154, 178 },
+ /* 015 */ { "Bellevue IGN", 17, -127, -769, 472 },
+ /* 016 */ { "Bermuda 1957", 6, -73, 213, 296 },
+ /* 017 */ { "Bukit Rimpah", 4, -384, 664, -48 },
+ /* 018 */ { "Camp_Area_Astro", 17, -104, -129, 239 },
+ /* 019 */ { "Campo_Inchauspe", 17, -148, 136, 90 },
+ /* 020 */ { "Canada_Mean(NAD27)", 5, -10, 158, 187 },
+ /* 021 */ { "Canal_Zone_(NAD27)", 5, 0, 125, 201 },
+ /* 022 */ { "Canton_Island_1966", 17, 298, -304, -375 },
+ /* 023 */ { "Cape", 6, -136, -108, -292 },
+ /* 024 */ { "Cape_Canaveral_mean", 5, -2, 150, 181 },
+ /* 025 */ { "Carribean NAD27", 5, -7, 152, 178 },
+ /* 026 */ { "Carthage", 6, -263, 6, 431 },
+ /* 027 */ { "Cent America NAD27", 5, 0, 125, 194 },
+ /* 028 */ { "Chatham 1971", 17, 175, -38, 113 },
+ /* 029 */ { "Chua Astro", 17, -134, 229, -29 },
+ /* 030 */ { "Corrego Alegre", 17, -206, 172, -6 },
+ /* 031 */ { "Cuba NAD27", 5, -9, 152, 178 },
+ /* 032 */ { "Cyprus", 17, -104, -101, -140 },
+ /* 033 */ { "Djakarta(Batavia)", 4, -377, 681, -50 },
+ /* 034 */ { "DOS 1968", 17, 230, -199, -752 },
+ /* 035 */ { "Easter lsland 1967", 17, 211, 147, 111 },
+ /* 036 */ { "Egypt", 17, -130, -117, -151 },
+ /* 037 */ { "European 1950", 17, -87, -96, -120 },
+ /* 038 */ { "European 1950 mean", 17, -87, -98, -121 },
+ /* 039 */ { "European 1979 mean", 17, -86, -98, -119 },
+ /* 040 */ { "Finnish Nautical", 17, -78, -231, -97 },
+ /* 041 */ { "Gandajika Base", 17, -133, -321, 50 },
+ /* 042 */ { "Geodetic Datum 49", 17, 84, -22, 209 },
+ /* 043 */ { "Ghana", 26, 0, 0, 0 },
+ /* 044 */ { "Greenland NAD27", 5, 11, 114, 195 },
+ /* 045 */ { "Guam 1963", 5, -100, -248, 259 },
+ /* 046 */ { "Gunung Segara", 4, -403, 684, 41 },
+ /* 047 */ { "Gunung Serindung 1962", 26, 0, 0, 0 },
+ /* 048 */ { "GUX1 Astro", 17, 252, -209, -751 },
+ /* 049 */ { "Herat North", 17, -333, -222, 114 },
+ /* 050 */ { "Hjorsey 1955", 17, -73, 46, 86 },
+ /* 051 */ { "Hong Kong 1963", 17, -156, -271, -189 },
+ /* 052 */ { "Hu-Tzu-Shan", 17, -634, -549, -201 },
+ /* 053 */ { "Indian", 9, 289, 734, 257 },
+ /* 054 */ { "Iran", 17, -117, -132, -164 },
+ /* 055 */ { "Ireland 1965", 1, 506, -122, 611 },
+ /* 056 */ { "ISTS 073 Astro 69", 17, 208, -435, -229 },
+ /* 057 */ { "Johnston Island 61", 17, 191, -77, -204 },
+ /* 058 */ { "Kandawala", 7, -97, 787, 86 },
+ /* 059 */ { "Kerguelen Island", 17, 145, -187, 103 },
+ /* 060 */ { "Kertau 48", 11, -11, 851, 5 },
+ /* 061 */ { "L.C. 5 Astro", 5, 42, 124, 147 },
+ /* 062 */ { "La Reunion", 17, 94, -948, -1262 },
+ /* 063 */ { "Liberia 1964", 6, -90, 40, 88 },
+ /* 064 */ { "Luzon", 5, -133, -77, -51 },
+ /* 065 */ { "Mahe 1971", 6, 41, -220, -134 },
+ /* 066 */ { "Marco Astro", 17, -289, -124, 60 },
+ /* 067 */ { "Masirah Is. Nahrwan", 6, -247, -148, 369 },
+ /* 068 */ { "Massawa", 4, 639, 405, 60 },
+ /* 069 */ { "Merchich", 6, 31, 146, 47 },
+ /* 070 */ { "Mexico NAD27", 5, -12, 130, 190 },
+ /* 071 */ { "Midway Astro 61", 17, 912, -58, 1227 },
+ /* 072 */ { "Mindanao", 5, -133, -79, -72 },
+ /* 073 */ { "Minna", 6, -92, -93, 122 },
+ /* 074 */ { "Montjong Lowe", 26, 0, 0, 0 },
+ /* 075 */ { "Nahrwan", 6, -231, -196, 482 },
+ /* 076 */ { "Naparima BWI", 17, -2, 374, 172 },
+ /* 077 */ { "North America 83", 21, 0, 0, 0 },
+ /* 078 */ { "N. America 1927 mean", 5, -8, 160, 176 },
+ /* 079 */ { "Observatorio 1966", 17, -425, -169, 81 },
+ /* 080 */ { "Old Egyptian", 14, -130, 110, -13 },
+ /* 081 */ { "Old Hawaiian_mean", 5, 89, -279, -183 },
+ /* 082 */ { "Old Hawaiian Kauai", 5, 45, -290, -172 },
+ /* 083 */ { "Old Hawaiian Maui", 5, 65, -290, -190 },
+ /* 084 */ { "Old Hawaiian Oahu", 5, 56, -284, -181 },
+ /* 085 */ { "Oman", 6, -346, -1, 224 },
+ /* 086 */ { "OSGB36", 0, 375, -111, 431 },
+ /* 087 */ { "Pico De Las Nieves", 17, -307, -92, 127 },
+ /* 088 */ { "Pitcairn Astro 67", 17, 185, 165, 42 },
+ /* 089 */ { "S. Am. 1956 mean(P)", 17, -288, 175, -376 },
+ /* 090 */ { "S. Chilean 1963 (P)", 17, 16, 196, 93 },
+ /* 091 */ { "Puerto Rico", 5, 11, 72, -101 },
+ /* 092 */ { "Pulkovo 1942", 18, 28, -130, -95 },
+ /* 093 */ { "Qornoq", 17, 164, 138, -189 },
+ /* 094 */ { "Quatar National", 17, -128, -283, 22 },
+ /* 095 */ { "Rome 1940", 17, -225, -65, 9 },
+ /* 096 */ { "S-42(Pulkovo1942)", 18, 28, -121, -77 },
+ /* 097 */ { "S.E.Asia_(Indian)", 7, 173, 750, 264 },
+ /* 098 */ { "SAD-69/Brazil", 22, -60, -2, -41 },
+ /* 099 */ { "Santa Braz", 17, -203, 141, 53 },
+ /* 100 */ { "Santo (DOS)", 17, 170, 42, 84 },
+ /* 101 */ { "Sapper Hill 43", 17, -355, 16, 74 },
+ /* 102 */ { "Schwarzeck", 3, 616, 97, -251 },
+ /* 103 */ { "Sicily", 17, -97, -88, -135 },
+ /* 104 */ { "Sierra Leone 1960", 26, 0, 0, 0 },
+ /* 105 */ { "S. Am. 1969 mean", 22, -57, 1, -41 },
+ /* 106 */ { "South Asia", 13, 7, -10, -26 },
+ /* 107 */ { "Southeast Base", 17, -499, -249, 314 },
+ /* 108 */ { "Southwest Base", 17, -104, 167, -38 },
+ /* 109 */ { "Tananarive Obs 25", 17, -189, -242, -91 },
+ /* 110 */ { "Thai/Viet (Indian)", 7, 214, 836, 303 },
+ /* 111 */ { "Timbalai 1948", 7, -689, 691, -45 },
+ /* 112 */ { "Tokyo mean", 4, -128, 481, 664 },
+ /* 113 */ { "Tristan Astro 1968", 17, -632, 438, -609 },
+ /* 114 */ { "United Arab Emirates", 6, -249, -156, 381 },
+ /* 115 */ { "Viti Levu 1916", 6, 51, 391, -36 },
+ /* 116 */ { "Wake Eniwetok 60", 15, 101, 52, -39 },
+ /* 117 */ { "WGS 72", 25, 0, 0, 5 },
+ /* 118 */ { "WGS 84", 26, 0, 0, 0 },
+ /* 119 */ { "Yacare", 17, -155, 171, 37 },
+ /* 120 */ { "Zanderij", 17, -265, 120, -358 },
+ /* 121 */ { "Sweden", 4, 424.3, -80.5, 613.1 },
+ /* 122 */ { "GDA 94", 21, 0, 0, 0 },
+ /* 123 */ { "CH-1903", 4, 674, 15, 405 },
+ /* 124 */ { "Palestine 1923", 27, -235, -85, 264 },
+ /* 125 */ { "ITM (Israeli New)", 21, -48, 55, -52 },
+ { nullptr, 0, 0, 0, 0 }
+};
+
+
+struct GPS_Datum_Alias {
+ const char* alias;
+ int datum;
+};
+
+const GPS_Datum_Alias GPS_DatumAliases[] = {
+ { "Australian GDA94", 122 },
+ { "Australian Geocentric 1994 (GDA94)", 122}, /* Observed in Ozi */
+ { "GDA94", 122 },
+ { "GDA-94", 122 },
+ { "CH1903", 123 },
+ { "CH 1903", 123 },
+ { "European 1950 (Spain and Portugal)", 38 },
+ { "Geodetic Datum 1949", 42 },
+ { "NAD27 Alaska", 3 },
+ { "NAD27 Bahamas", 14 },
+ { "NAD27 Canada", 4 },
+ { "NAD27 Canal Zone", 21 },
+ { "NAD27 Caribbean", 25 },
+ { "NAD27 Central", 27 },
+ { "NAD27 CONUS", 78 },
+ { "NAD27 Cuba", 31 },
+ { "NAD27 Greenland", 44 },
+ { "NAD27 Mexico", 70 },
+ { "NAD83", 77 },
+ { "NAD 83", 77 },
+ { "NAD-83", 77 },
+ { "OSGB 36", 86 },
+ { "OSGB-36", 86 },
+ { "Wake-Eniwetok 1960", 116 },
+ { "WGS72", 117 },
+ { "WGS-72", 117 },
+ { "WGS84", 118 },
+ { "WGS-84", 118 },
+ { "Israeli", 124 },
+ { "D_Israel_new", 125 },
+ { nullptr, -1 }
+};
+
+
+/* UK Ordnance Survey Nation Grid Map Codes */
+static const char* const UKNG[]= {
+ "SV","SW","SX","SY","SZ","TV","TW","SQ","SR","SS","ST","SU","TQ","TR",
+ "SL","SM","SN","SO","SP","TL","TM","SF","SG","SH","SJ","SK","TF","TG",
+ "SA","SB","SC","SD","SE","TA","TB","NV","NW","NX","NY","NZ","OV","OW",
+ "NQ","NR","NS","NT","NU","OQ","OR","NL","NM","NN","NO","NP","OL","OM",
+ "NF","NG","NH","NJ","NK","OF","OG","NA","NB","NC","ND","NE","OA","OB",
+ "HV","HW","HX","HY","HZ","JV","JW","HQ","HR","HS","HT","HU","JQ","JR",
+ "HL","HM","HN","HO","HP","JL","JM",""
+};
** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
** Boston, MA 02110-1301, USA.
********************************************************************/
-#include "jeeps/gps.h"
-#include "jeeps/gpsdatum.h"
-#include <cmath>
-#include <cstdlib>
-#include <cstring>
+#include "jeeps/gpsmath.h"
+
+#include <cassert> // for assert
+#include <cmath> // for sin, tan, cos, pow, log, sqrt, asin, atan, exp, fabs, round
+#include <cstdint> // for int32_t
+#include <cstdlib> // for abs
+#include <cstring> // for strcmp, strcpy
+#include <ctime> // for time_t
+
+#include <QString> // for QString
+
+#include "defs.h" // for case_ignore_strcmp, fatal, CSTR
+#include "jeeps/gpsdatum.h" // for GPS_ODatum, GPS_OEllipse, GPS_Datums, GPS_Ellipses, UKNG, GPS_SDatum_Alias, GPS_SDatum, GPS_DatumAliases, GPS_PDatum, GPS_PDatum_Alias
static int32_t GPS_Math_LatLon_To_UTM_Param(double lat, double lon, int32_t* zone,
return 0;
}
- a = GPS_Ellipse[4].a;
- b = a - (a / GPS_Ellipse[4].invf);
+ assert(strcmp(GPS_Ellipses[4].name, "Bessel 1841") == 0);
+ a = GPS_Ellipses[4].a;
+ b = a - (a / GPS_Ellipses[4].invf);
GPS_Math_WGS84_To_Known_Datum_M(lat, lon, 0, &phi, &lambda, &alt, 123);
GPS_Math_Swiss_LatLon_To_EN(phi, lambda, E, N, phi0, lambda0, E0, N0, a, b);
const double N0 = 200000.0;
double phi, lambda, alt, a, b;
- a = GPS_Ellipse[4].a;
- b = a - (a / GPS_Ellipse[4].invf);
+ assert(strcmp(GPS_Ellipses[4].name, "Bessel 1841") == 0);
+ a = GPS_Ellipses[4].a;
+ b = a - (a / GPS_Ellipses[4].invf);
GPS_Math_Swiss_EN_To_LatLon(E, N, &phi, &lambda, phi0, lambda0, E0, N0, a, b);
GPS_Math_Known_Datum_To_WGS84_M(phi, lambda, 0, lat, lon, &alt, 123);
if (datum < 0) {
fatal("Unable to find Palestine 1923 in internal tables");
}
- int32_t ellipse = GPS_Datum[datum].ellipse;
+ int32_t ellipse = GPS_Datums[datum].ellipse;
- a = GPS_Ellipse[ellipse].a;
- b = a - (a / GPS_Ellipse[ellipse].invf);
+ a = GPS_Ellipses[ellipse].a;
+ b = a - (a / GPS_Ellipses[ellipse].invf);
GPS_Math_WGS84_To_Known_Datum_M(lat, lon, 0, &phi, &lambda, &alt, datum);
GPS_Math_Cassini_LatLon_To_EN(phi, lambda, E, N,
if (datum < 0) {
fatal("Unable to find Palestine 1923 in internal tables");
}
- int32_t ellipse = GPS_Datum[datum].ellipse;
+ int32_t ellipse = GPS_Datums[datum].ellipse;
- a = GPS_Ellipse[ellipse].a;
- b = a - (a / GPS_Ellipse[ellipse].invf);
+ a = GPS_Ellipses[ellipse].a;
+ b = a - (a / GPS_Ellipses[ellipse].invf);
GPS_Math_Cassini_EN_To_LatLon(E, N, &phi, &lambda, phi0, lambda0,
E0, N0, a, b);
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
Da = 6378137.0;
Dif = 298.257223563;
- idx = GPS_Datum[n].ellipse;
- Sa = GPS_Ellipse[idx].a;
- Sif = GPS_Ellipse[idx].invf;
- x = GPS_Datum[n].dx;
- y = GPS_Datum[n].dy;
- z = GPS_Datum[n].dz;
+ idx = GPS_Datums[n].ellipse;
+ Sa = GPS_Ellipses[idx].a;
+ Sif = GPS_Ellipses[idx].invf;
+ x = GPS_Datums[n].dx;
+ y = GPS_Datums[n].dy;
+ z = GPS_Datums[n].dz;
GPS_Math_Molodensky(Sphi,Slam,SH,Sa,Sif,Dphi,Dlam,DH,Da,Dif,x,y,z);
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
Sa = 6378137.0;
Sif = 298.257223563;
- idx = GPS_Datum[n].ellipse;
- Da = GPS_Ellipse[idx].a;
- Dif = GPS_Ellipse[idx].invf;
- x = -GPS_Datum[n].dx;
- y = -GPS_Datum[n].dy;
- z = -GPS_Datum[n].dz;
+ idx = GPS_Datums[n].ellipse;
+ Da = GPS_Ellipses[idx].a;
+ Dif = GPS_Ellipses[idx].invf;
+ x = -GPS_Datums[n].dx;
+ y = -GPS_Datums[n].dy;
+ z = -GPS_Datums[n].dz;
GPS_Math_Molodensky(Sphi,Slam,SH,Sa,Sif,Dphi,Dlam,DH,Da,Dif,x,y,z);
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
Dif = 298.257223563;
Db = Da - (Da / Dif);
- idx = GPS_Datum[n].ellipse;
- Sa = GPS_Ellipse[idx].a;
- Sif = GPS_Ellipse[idx].invf;
+ idx = GPS_Datums[n].ellipse;
+ Sa = GPS_Ellipses[idx].a;
+ Sif = GPS_Ellipses[idx].invf;
Sb = Sa - (Sa / Sif);
- x = GPS_Datum[n].dx;
- y = GPS_Datum[n].dy;
- z = GPS_Datum[n].dz;
+ x = GPS_Datums[n].dx;
+ y = GPS_Datums[n].dy;
+ z = GPS_Datums[n].dz;
GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&sx,&sy,&sz,Sa,Sb);
sx += x;
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
Sif = 298.257223563;
Sb = Sa - (Sa / Sif);
- idx = GPS_Datum[n].ellipse;
- Da = GPS_Ellipse[idx].a;
- Dif = GPS_Ellipse[idx].invf;
+ idx = GPS_Datums[n].ellipse;
+ Da = GPS_Ellipses[idx].a;
+ Dif = GPS_Ellipses[idx].invf;
Db = Da - (Da / Dif);
- x = -GPS_Datum[n].dx;
- y = -GPS_Datum[n].dy;
- z = -GPS_Datum[n].dz;
+ x = -GPS_Datums[n].dx;
+ y = -GPS_Datums[n].dy;
+ z = -GPS_Datums[n].dz;
GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&dx,&dy,&dz,Sa,Sb);
dx += x;
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n1 [int32] source datum number from GPS_Datum structure
-** @param [r] n2 [int32] dest datum number from GPS_Datum structure
+** @param [r] n1 [int32] source datum number from GPS_Datums structure
+** @param [r] n2 [int32] dest datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
int32_t idx2;
- idx1 = GPS_Datum[n1].ellipse;
- Sa = GPS_Ellipse[idx1].a;
- Sif = GPS_Ellipse[idx1].invf;
- x1 = GPS_Datum[n1].dx;
- y1 = GPS_Datum[n1].dy;
- z1 = GPS_Datum[n1].dz;
+ idx1 = GPS_Datums[n1].ellipse;
+ Sa = GPS_Ellipses[idx1].a;
+ Sif = GPS_Ellipses[idx1].invf;
+ x1 = GPS_Datums[n1].dx;
+ y1 = GPS_Datums[n1].dy;
+ z1 = GPS_Datums[n1].dz;
- idx2 = GPS_Datum[n2].ellipse;
- Da = GPS_Ellipse[idx2].a;
- Dif = GPS_Ellipse[idx2].invf;
- x2 = GPS_Datum[n2].dx;
- y2 = GPS_Datum[n2].dy;
- z2 = GPS_Datum[n2].dz;
+ idx2 = GPS_Datums[n2].ellipse;
+ Da = GPS_Ellipses[idx2].a;
+ Dif = GPS_Ellipses[idx2].invf;
+ x2 = GPS_Datums[n2].dx;
+ y2 = GPS_Datums[n2].dy;
+ z2 = GPS_Datums[n2].dz;
x = -(x2-x1);
y = -(y2-y1);
** @param [w] Dphi [double *] dest latitude (deg)
** @param [w] Dlam [double *] dest longitude (deg)
** @param [w] DH [double *] dest height (metres)
-** @param [r] n1 [int32] source datum number from GPS_Datum structure
-** @param [r] n2 [int32] dest datum number from GPS_Datum structure
+** @param [r] n1 [int32] source datum number from GPS_Datums structure
+** @param [r] n2 [int32] dest datum number from GPS_Datums structure
**
** @return [void]
************************************************************************/
double dy;
double dz;
- idx1 = GPS_Datum[n1].ellipse;
- Sa = GPS_Ellipse[idx1].a;
- Sif = GPS_Ellipse[idx1].invf;
+ idx1 = GPS_Datums[n1].ellipse;
+ Sa = GPS_Ellipses[idx1].a;
+ Sif = GPS_Ellipses[idx1].invf;
Sb = Sa - (Sa / Sif);
- x1 = GPS_Datum[n1].dx;
- y1 = GPS_Datum[n1].dy;
- z1 = GPS_Datum[n1].dz;
+ x1 = GPS_Datums[n1].dx;
+ y1 = GPS_Datums[n1].dy;
+ z1 = GPS_Datums[n1].dz;
- idx2 = GPS_Datum[n2].ellipse;
- Da = GPS_Ellipse[idx2].a;
- Dif = GPS_Ellipse[idx2].invf;
+ idx2 = GPS_Datums[n2].ellipse;
+ Da = GPS_Ellipses[idx2].a;
+ Dif = GPS_Ellipses[idx2].invf;
Db = Da - (Da / Dif);
- x2 = GPS_Datum[n2].dx;
- y2 = GPS_Datum[n2].dy;
- z2 = GPS_Datum[n2].dz;
+ x2 = GPS_Datums[n2].dx;
+ y2 = GPS_Datums[n2].dy;
+ z2 = GPS_Datums[n2].dz;
GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&dx,&dy,&dz,Sa,Sb);
dx += -(x2-x1);
phi0 = 0.0;
- a = GPS_Ellipse[21].a;
- b = a - (a/GPS_Ellipse[21].invf);
+ assert(strcmp(GPS_Ellipses[21].name, "GRS80") == 0);
+ a = GPS_Ellipses[21].a;
+ b = a - (a / GPS_Ellipses[21].invf);
GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
return 0;
}
- GPS_Math_UTM_EN_to_LatLon(GPS_Datum[118].ellipse, N, E, lat, lon, lambda0, E0, N0);
+ GPS_Math_UTM_EN_to_LatLon(GPS_Datums[118].ellipse, N, E, lat, lon, lambda0, E0, N0);
return 1;
}
** @param [w] N [double *] northing (metres)
** @param [w] zone [int32 *] zone number
** @param [w] zc [char *] zone character
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [int32] success
************************************************************************/
phi0 = 0.0;
- idx = GPS_Datum[n].ellipse;
- a = GPS_Ellipse[idx].a;
- b = a - (a/GPS_Ellipse[idx].invf);
+ idx = GPS_Datums[n].ellipse;
+ a = GPS_Ellipses[idx].a;
+ b = a - (a / GPS_Ellipses[idx].invf);
GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
** @param [w] N [double] northing (metres)
** @param [w] zone [int32] zone number
** @param [w] zc [char] zone character
-** @param [r] n [int32] datum number from GPS_Datum structure
+** @param [r] n [int32] datum number from GPS_Datums structure
**
** @return [int32] success
************************************************************************/
return 0;
}
- GPS_Math_UTM_EN_to_LatLon(GPS_Datum[n].ellipse, N, E, lat, lon, lambda0, E0, N0);
+ GPS_Math_UTM_EN_to_LatLon(GPS_Datums[n].ellipse, N, E, lat, lon, lambda0, E0, N0);
return 1;
}
double mu, phi1Rad;
double x, y;
- a = GPS_Ellipse[ReferenceEllipsoid].a;
- b = 1 / GPS_Ellipse[ReferenceEllipsoid].invf;
+ a = GPS_Ellipses[ReferenceEllipsoid].a;
+ b = 1 / GPS_Ellipses[ReferenceEllipsoid].invf;
eccSquared = b * (2.0 - b);
e1 = (1-sqrt(1-eccSquared))/(1+sqrt(1-eccSquared));
int32_t GPS_Lookup_Datum_Index(const char* n)
{
- GPS_PDatum dp;
- GPS_PDatum_Alias al;
+ const GPS_Datum* dp;
+ const GPS_Datum_Alias* al;
- for (al = GPS_DatumAlias; al->alias; al++) {
+ for (al = GPS_DatumAliases; al->alias; al++) {
if (case_ignore_strcmp(al->alias, n) == 0) {
return al->datum;
}
}
- for (dp = GPS_Datum; dp->name; dp++) {
+ for (dp = GPS_Datums; dp->name; dp++) {
if (0 == case_ignore_strcmp(dp->name, n)) {
- return dp - GPS_Datum;
+ return dp - GPS_Datums;
}
}
const char*
GPS_Math_Get_Datum_Name(const int datum_index)
{
- return GPS_Datum[datum_index].name;
+ return GPS_Datums[datum_index].name;
}
#ifndef JEEPS_GPSMATH_H_INCLUDED_
#define JEEPS_GPSMATH_H_INCLUDED_
-#include "jeeps/gpsport.h"
+#include <cstdint> // for int32_t
+#include <ctime> // for time_t
-#define GPS_PI 3.141592653589
-#define GPS_FLTMIN 1.75494351E-38
-#define GPS_FLTMAX 3.402823466E+38
+#include <QString> // for QString
- double GPS_Math_Deg_To_Rad(double v);
- double GPS_Math_Rad_To_Deg(double v);
+constexpr double GPS_PI = 3.141592653589;
- double GPS_Math_Metres_To_Feet(double v);
- double GPS_Math_Feet_To_Metres(double v);
+
+double GPS_Math_Deg_To_Rad(double v);
+double GPS_Math_Rad_To_Deg(double v);
+
+double GPS_Math_Metres_To_Feet(double v);
+double GPS_Math_Feet_To_Metres(double v);
int32_t GPS_Math_Deg_To_Semi(double v);
- double GPS_Math_Semi_To_Deg(int32_t v);
+double GPS_Math_Semi_To_Deg(int32_t v);
- time_t GPS_Math_Utime_To_Gtime(time_t v);
- time_t GPS_Math_Gtime_To_Utime(time_t v);
+time_t GPS_Math_Utime_To_Gtime(time_t v);
+time_t GPS_Math_Gtime_To_Utime(time_t v);
- void GPS_Math_Deg_To_DegMin(double v, int32_t* d, double* m);
- void GPS_Math_DegMin_To_Deg(int32_t d, double m, double* deg);
- void GPS_Math_Deg_To_DegMinSec(double v, int32_t* d, int32_t* m, double* s);
- void GPS_Math_DegMinSec_To_Deg(int32_t d, int32_t m, double s, double* deg);
+void GPS_Math_Deg_To_DegMin(double v, int32_t* d, double* m);
+void GPS_Math_DegMin_To_Deg(int32_t d, double m, double* deg);
+void GPS_Math_Deg_To_DegMinSec(double v, int32_t* d, int32_t* m, double* s);
+void GPS_Math_DegMinSec_To_Deg(int32_t d, int32_t m, double s, double* deg);
- void GPS_Math_Airy1830LatLonToNGEN(double phi, double lambda, double* E,
- double* N);
- void GPS_Math_Airy1830M_LatLonToINGEN(double phi, double lambda, double* E,
- double* N);
+void GPS_Math_Airy1830LatLonToNGEN(double phi, double lambda, double* E,
+ double* N);
+void GPS_Math_Airy1830M_LatLonToINGEN(double phi, double lambda, double* E,
+ double* N);
int32_t GPS_Math_EN_To_UKOSNG_Map(double E, double N, double* mE,
double* mN, char* map);
int32_t GPS_Math_UKOSNG_Map_To_EN(const char* map, double mapE, double mapN,
double* E, double* N);
- void GPS_Math_LatLonH_To_XYZ(double phi, double lambda, double H,
- double* x, double* y, double* z,
- double a, double b);
- void GPS_Math_XYZ_To_LatLonH(double* phi, double* lambda, double* H,
- double x, double y, double z,
- double a, double b);
-
- void GPS_Math_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double N0, double E0,
- double phi0, double lambda0,
- double F0, double a, double b);
- void GPS_Math_LatLon_To_EN(double* E, double* N, double phi,
- double lambda, double N0, double E0,
- double phi0, double lambda0,
- double F0, double a, double b);
-
- void GPS_Math_NGENToAiry1830LatLon(double E, double N, double* phi,
+void GPS_Math_LatLonH_To_XYZ(double phi, double lambda, double H,
+ double* x, double* y, double* z,
+ double a, double b);
+void GPS_Math_XYZ_To_LatLonH(double* phi, double* lambda, double* H,
+ double x, double y, double z,
+ double a, double b);
+
+void GPS_Math_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double N0, double E0,
+ double phi0, double lambda0,
+ double F0, double a, double b);
+void GPS_Math_LatLon_To_EN(double* E, double* N, double phi,
+ double lambda, double N0, double E0,
+ double phi0, double lambda0,
+ double F0, double a, double b);
+
+void GPS_Math_NGENToAiry1830LatLon(double E, double N, double* phi,
+ double* lambda);
+void GPS_Math_INGENToAiry1830MLatLon(double E, double N, double* phi,
double* lambda);
- void GPS_Math_INGENToAiry1830MLatLon(double E, double N, double* phi,
- double* lambda);
-
-
- void GPS_Math_Airy1830LatLonH_To_XYZ(double phi, double lambda, double H,
- double* x, double* y, double* z);
- void GPS_Math_WGS84LatLonH_To_XYZ(double phi, double lambda, double H,
- double* x, double* y, double* z);
- void GPS_Math_XYZ_To_Airy1830LatLonH(double* phi, double* lambda, double* H,
- double x, double y, double z);
- void GPS_Math_XYZ_To_WGS84LatLonH(double* phi, double* lambda, double* H,
- double x, double y, double z);
-
- void GPS_Math_Molodensky(double Sphi, double Slam, double SH, double Sa,
- double Sif, double* Dphi, double* Dlam,
- double* DH, double Da, double Dif, double dx,
- double dy, double dz);
- void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam, double* DH,
- int32_t n);
- void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam, double* DH,
- int32_t n);
- void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam, double* DH,
- int32_t n);
- void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam, double* DH,
- int32_t n);
-
- void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam,
- double* DH, int32_t n1, int32_t n2);
- void GPS_Math_Known_Datum_To_Known_Datum_C(double Sphi, double Slam, double SH,
- double* Dphi, double* Dlam,
- double* DH, int32_t n1, int32_t n2);
+
+
+void GPS_Math_Airy1830LatLonH_To_XYZ(double phi, double lambda, double H,
+ double* x, double* y, double* z);
+void GPS_Math_WGS84LatLonH_To_XYZ(double phi, double lambda, double H,
+ double* x, double* y, double* z);
+void GPS_Math_XYZ_To_Airy1830LatLonH(double* phi, double* lambda, double* H,
+ double x, double y, double z);
+void GPS_Math_XYZ_To_WGS84LatLonH(double* phi, double* lambda, double* H,
+ double x, double y, double z);
+
+void GPS_Math_Molodensky(double Sphi, double Slam, double SH, double Sa,
+ double Sif, double* Dphi, double* Dlam,
+ double* DH, double Da, double Dif, double dx,
+ double dy, double dz);
+void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam, double* DH,
+ int32_t n);
+void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam, double* DH,
+ int32_t n);
+void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam, double* DH,
+ int32_t n);
+void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam, double* DH,
+ int32_t n);
+
+void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam,
+ double* DH, int32_t n1, int32_t n2);
+void GPS_Math_Known_Datum_To_Known_Datum_C(double Sphi, double Slam, double SH,
+ double* Dphi, double* Dlam,
+ double* DH, int32_t n1, int32_t n2);
int32_t GPS_Math_WGS84_To_UKOSMap_M(double lat, double lon, double* mE,
double* mN, char* map);
int32_t GPS_Math_UTM_EN_To_Known_Datum(double* lat, double* lon, double E,
double N, int32_t zone, char zc, int n);
- void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
- double* N,double phi0,double lambda0,
+void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N,double phi0,double lambda0,
+ double E0, double N0, double a, double b);
+void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double lambda0,
+ double E0, double N0, double a, double b);
+
+void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0,
double E0, double N0, double a, double b);
- void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double lambda0,
+void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
double E0, double N0, double a, double b);
- void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0,
- double E0, double N0, double a, double b);
- void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
- double E0, double N0, double a, double b);
-
int32_t GPS_Math_WGS84_To_ICS_EN(double lat, double lon, double* E,
double* N);
- void GPS_Math_ICS_EN_To_WGS84(double E, double N, double* lat, double* lon);
+void GPS_Math_ICS_EN_To_WGS84(double E, double N, double* lat, double* lon);
int32_t GPS_Math_WGS84_To_Swiss_EN(double phi, double lambda, double* E, double* N);
- void GPS_Math_Swiss_EN_To_WGS84(double E, double N, double* lat, double* lon);
+void GPS_Math_Swiss_EN_To_WGS84(double E, double N, double* lat, double* lon);
- void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
- double UTMNorthing, double UTMEasting,
- double* Lat, double* Lon,
- double lambda0, double E0, double N0);
+void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
+ double UTMNorthing, double UTMEasting,
+ double* Lat, double* Lon,
+ double lambda0, double E0, double N0);
int32_t GPS_Lookup_Datum_Index(const char* n);
int32_t GPS_Lookup_Datum_Index(const QString& n);
- const char* GPS_Math_Get_Datum_Name(int datum_index);
+const char* GPS_Math_Get_Datum_Name(int datum_index);
#endif // JEEPS_GPSMATH_H_INCLUDED_
#ifndef JEEPS_GPSMEM_H_INCLUDED_
#define JEEPS_GPSMEM_H_INCLUDED_
+constexpr double GPS_FLTMIN = 1.75494351E-38;
+constexpr double GPS_FLTMAX = 3.402823466E+38;
#include "jeeps/gps.h"
GPS_PPvt_Data GPS_Pvt_New();
** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
** Boston, MA 02110-1301, USA.
********************************************************************/
-#include "jeeps/gps.h"
-#include <cmath>
-#include <cstring>
+#include "jeeps/gpsproj.h"
+
+#include <cmath> // for sin, pow, cos, fabs, log, tan, asin, atan, atan2, sqrt, exp, acos, sinh
+
+#include "jeeps/gpsmath.h" // for GPS_Math_Deg_To_Rad, GPS_PI, GPS_Math_Rad_To_Deg, GPS_Math_EN_To_LatLon, GPS_Math_LatLon_To_EN, GPS_Math_Cassini_EN_To_LatLon, GPS_Math_Cassini_LatLon_To_EN, GPS_Math_Swiss_EN_To_LatLon, GPS_Math_Swiss_LatLon_To_EN
/* @func GPS_Math_Albers_LatLon_To_EN **********************************
#define JEEPS_GPSPROJ_H_INCLUDED_
-#include "jeeps/gps.h"
+void GPS_Math_Albers_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi1, double phi2,
+ double phi0, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Albers_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi1, double phi2,
+ double phi0, double M0, double E0,
+ double N0, double a, double b);
+
+
+void GPS_Math_LambertCC_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi1, double phi2,
+ double phi0, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi1, double phi2,
+ double phi0, double M0, double E0,
+ double N0, double a, double b);
+
+void GPS_Math_Miller_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Miller_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
+ double N0, double a, double b);
+
+void GPS_Math_Bonne_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Bonne_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
+ double E0, double N0, double a, double b);
+
+void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0,
+ double E0, double N0, double a, double b);
+void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
+ double E0, double N0, double a, double b);
- void GPS_Math_Albers_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi1, double phi2,
- double phi0, double M0, double E0,
+void GPS_Math_Cylea_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0,
+ double E0, double N0, double a, double b);
+void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
+ double E0, double N0, double a, double b);
+
+void GPS_Math_EckertIV_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0, double N0,
+ double a, double b);
+void GPS_Math_EckertIV_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
double N0, double a, double b);
- void GPS_Math_Albers_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi1, double phi2,
- double phi0, double M0, double E0,
+
+void GPS_Math_EckertVI_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0, double N0,
+ double a, double b);
+void GPS_Math_EckertVI_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
double N0, double a, double b);
+void GPS_Math_Cyled_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Cyled_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
+ double E0, double N0, double a, double b);
- void GPS_Math_LambertCC_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi1, double phi2,
- double phi0, double M0, double E0,
+void GPS_Math_VderGrinten_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0,
double N0, double a, double b);
- void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi1, double phi2,
- double phi0, double M0, double E0,
+void GPS_Math_VderGrinten_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
double N0, double a, double b);
- void GPS_Math_Miller_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_Miller_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
-
- void GPS_Math_Bonne_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_Bonne_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
+void GPS_Math_PolarSt_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi1, double lambda1,
+ double E0, double N0, double a, double b);
+void GPS_Math_PolarSt_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi1, double lambda1,
double E0, double N0, double a, double b);
- void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0,
- double E0, double N0, double a, double b);
- void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
- double E0, double N0, double a, double b);
-
- void GPS_Math_Cylea_LatLon_To_EN(double phi, double lambda, double* E,
+void GPS_Math_Mollweide_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Mollweide_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
+ double N0, double a, double b);
+
+void GPS_Math_Orthog_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double lambda0,
+ double E0, double N0, double a, double b);
+void GPS_Math_Orthog_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double lambda0,
+ double E0, double N0, double a, double b);
+
+void GPS_Math_Polycon_LatLon_To_EN(double phi, double lambda, double* E,
double* N, double phi0, double M0,
double E0, double N0, double a, double b);
- void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double* phi,
+void GPS_Math_Polycon_EN_To_LatLon(double E, double N, double* phi,
double* lambda, double phi0, double M0,
double E0, double N0, double a, double b);
- void GPS_Math_EckertIV_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0, double N0,
- double a, double b);
- void GPS_Math_EckertIV_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
-
- void GPS_Math_EckertVI_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0, double N0,
- double a, double b);
- void GPS_Math_EckertVI_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
-
- void GPS_Math_Cyled_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_Cyled_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
- double E0, double N0, double a, double b);
+void GPS_Math_Sinusoid_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_Sinusoid_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double M0, double E0,
+ double N0, double a, double b);
- void GPS_Math_VderGrinten_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_VderGrinten_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
-
- void GPS_Math_PolarSt_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi1, double lambda1,
- double E0, double N0, double a, double b);
- void GPS_Math_PolarSt_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi1, double lambda1,
- double E0, double N0, double a, double b);
-
- void GPS_Math_Mollweide_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_Mollweide_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
+void GPS_Math_TCylEA_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double M0, double E0,
+ double N0, double a, double b);
+void GPS_Math_TCylEA_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double M0,
+ double E0, double N0, double a, double b);
- void GPS_Math_Orthog_LatLon_To_EN(double phi, double lambda, double* E,
+void GPS_Math_Mercator_LatLon_To_EN(double phi, double lambda, double* E,
double* N, double phi0, double lambda0,
double E0, double N0, double a, double b);
- void GPS_Math_Orthog_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double lambda0,
- double E0, double N0, double a, double b);
-
- void GPS_Math_Polycon_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0,
- double E0, double N0, double a, double b);
- void GPS_Math_Polycon_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
- double E0, double N0, double a, double b);
-
- void GPS_Math_Sinusoid_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_Sinusoid_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double M0, double E0,
- double N0, double a, double b);
-
- void GPS_Math_TCylEA_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double M0, double E0,
- double N0, double a, double b);
- void GPS_Math_TCylEA_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double M0,
- double E0, double N0, double a, double b);
-
- void GPS_Math_Mercator_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double lambda0,
- double E0, double N0, double a, double b);
- void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0,
- double lambda0, double E0, double N0,
- double a, double b);
-
- void GPS_Math_TMerc_LatLon_To_EN(double phi, double lambda, double* E,
- double* N, double phi0, double lambda0,
- double E0, double N0, double F0,
- double a, double b);
- void GPS_Math_TMerc_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double lambda0,
- double E0, double N0, double F0,
- double a, double b);
-
- void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
- double* N,double phi0,double lambda0,
- double E0, double N0, double a, double b);
- void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
- double* lambda, double phi0, double lambda0,
- double E0, double N0, double a, double b);
+void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0,
+ double lambda0, double E0, double N0,
+ double a, double b);
+
+void GPS_Math_TMerc_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N, double phi0, double lambda0,
+ double E0, double N0, double F0,
+ double a, double b);
+void GPS_Math_TMerc_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double lambda0,
+ double E0, double N0, double F0,
+ double a, double b);
+
+void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
+ double* N,double phi0,double lambda0,
+ double E0, double N0, double a, double b);
+void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
+ double* lambda, double phi0, double lambda0,
+ double E0, double N0, double a, double b);
#endif // JEEPS_GPSPROJ_H_INCLUDED_